/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package lisp;

/**
 *
 * @author luisorozco
 */
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.TreeMap;

public class Funciones 
{
        private LinkedList funciones;
        private ArrayList<String> parametros;
        private ArrayList digitos;
        private Listas verificar;
        private int numParametros;
  
        public Funciones(Listas evaluar)
        {
                verificar=evaluar;
                funciones= new LinkedList();
                parametros=new ArrayList<String>();
        }

        
        public String OperarFun(String input)
        {
                ArrayList nomParametros=new ArrayList();
                String nombre;
                String params;
                
                int parentesis=input.indexOf(' ');
                int parentesis2=input.indexOf(')');
                
                nombre=input.substring(0, parentesis);
                
                String[] temp= null;  
                params=input.substring(parentesis,parentesis2);
                temp=params.split(" ");
                                
                Funcion funcion1;
                Funcion funcionfinal=null;
                boolean search=false;
                
                for(int i=0; i<funciones.size(); i++)
                {
                        funcion1=(Funcion) funciones.get(i);
                        
                        if(nombre.compareTo(funcion1.getCode())==0)
                        {
                                funcionfinal=funcion1;
                                search=true;
                                break;
                        }
                }
                
                /**
                 * 
        /**
         *Aqui vera si hay parentesis o no
        
        int contador = 0;
        for(int i=0; i<list.length(); i++){
            if(list.charAt(i)=='('|| list.charAt(i)==')'){
                contador++;
            }
        }
        return (contador!=0);
    
          */      
                if(search)
                {
                        nomParametros=funcionfinal.getParametros();

                        for(int i=1; i<temp.length; i++)
                        {
                                        parametros.add(temp[i]);
                        }
                        
                        if(parametros.size()!=funcionfinal.getNumParametros())
                        {
                                return null;
                        }
                        else 
                        {
                                for(int i=0; i<parametros.size(); i++)
                                {
                                        verificar.setTherap2((String)nomParametros.get(i), (String)parametros.get(i));
                                }
                        }
                        
                        String result=verificar.Operar(funcionfinal.getBody());
                        parametros.clear();
                        return result;
                }
                return null;
        }
}